package com.liyunhan.SortAlgorithm;

import java.util.ArrayList;

/**
 * @Description: 递归实现快速排序 (指定的low and high)
 * @Author: Liyunhan
 * @Date: 2021/10/3 23:15
 */
public class QuickSortRecursion extends AlgorithmAbs {

    public QuickSortRecursion(ArrayList<Double> arrayList) {
        super(arrayList);
    }

    @Override
    public void executeAlgorithm(int... ints) {
        //可变形参要求只能没有或者两个值
        if (ints.length != 2) {
            System.out.println("输入参数只能是0个或者两个!");
            System.exit(0);
        }

        double pivot;
        //左右指针
        int i = ints[0], j = ints[1];
        if (i < j) {
            //默认选取左侧为枢轴
            pivot = arrayList.get(i);
            //一趟快速排序, 实现数组中小于枢轴(pivot)的关键字放左边, 大于枢轴的关键字放右边
            /*
            编译器优化后做了自动装箱处理，var0 = Integer.valueOf(100);
            所以i1指向了Integer.valueOf(100)这个新产生的对象，所以最后和值传递的效果一样，
            不会改变调用该方法的参数的值。
             */
            i = QuickSortNonRecursion.onceQuickSort(i, j, arrayList);
            //将枢轴(pivot)放到最终位置
            arrayList.set(i, pivot);
            executeAlgorithm(ints[0], i - 1);
            executeAlgorithm(i + 1, ints[1]);
        }
    }


}
